"""
class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):

        #:return: 魔术方法，在打印对象本身的时候，会去调用，自动触发

        return "<name:%s age %s>"%(self.name,self.age)
    def run(self):
        return self.name

if __name__ == '__main__':
    obj = People("长帅",18)
    print(obj) # 地址值 X  不是了  是__str__里的内容
"""
"""
class Foo:
    def __init__(self,x,filepath,encoding = 'utf8'):
        self.x = x
        self.f = open(filepath,'r',encoding=encoding)
    def __del__(self):
        
        #:return: 当资源没有再使用的时候，自动触发回收资源
        
        print('__del__正在运行')
        self.f.close()
if __name__ == '__main__':
    # 不要依赖__del__的方式回收文件资源，用with上下文的方式来管理
    obj = Foo(1,'a.txt')
    print(obj.f.read())
    # obj.f.close() # 手动关闭了
    print(obj.f.read()) # 文件已经关掉了，就不能再读，
"""
class Foo:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __call__(self, *args, **kwargs):
        print(self,args,kwargs)
    def run(self):
        print('run')
if __name__ == '__main__':
    obj1 = Foo(1,2)
    #obj1(1,2,3) # __main__.Foo object at 0x0000029B83ED3FD0> (1,2,3) {}
    obj1(1,2,3,name='张三')
    obj1.run() # 不会影响到它本来的功能，还是可以调用类方法的
    print(Foo) # <class '__main__.Foo'>
    Foo(1,2)(1,2,3,age=19)     # 现在它就是一个对象了

